from typing import List


class Solution:
    """
    方法：二分查找
    在旋转排序数组中查找最小值。通过比较中间元素与最后一个元素的大小关系来判断最小值在哪一侧。
    如果中间元素小于最后一个元素，说明最小值在左半部分（包括中间元素）；
    否则最小值在右半部分。

    Args:
        nums: List[int], 旋转排序数组

    Returns:
        int: 数组中的最小值

    Time: O(logn)，其中n是数组的长度，每次将搜索范围缩小一半
    
    Space: O(1)，只使用常数额外空间
    """
    def findMin(self, nums: List[int]) -> int:
        left, right = -1, len(nums) - 1 #(-1, n-1)
        while left + 1 < right:
            mid = (left + right) // 2
            if nums[mid] < nums[-1]:
                right = mid
            else:
                left = mid
        return nums[right]
        